//
//  HMStatus.swift
//  HMWeibo1
//
//  Created by liGordon on 16/4/12.
//  Copyright © 2016年 lifuli. All rights reserved.
//

import UIKit

class HMStatus: NSObject {
    
    /// 微博创建时间
    var created_at: String?
    
    /// 微博ID
    var id: Int = 0
    
    /// 微博信息内容
    var text: String?
    
    /// 微博来源
    var source: String?
    
    /// 转发数
    var reposts_count: Int = 0
    
    /// 评论数
    var comments_count: Int = 0
    
    /// 表态数(赞)
    var attitudes_count: Int = 0
    
    
    /// 微博的配图 [Int] [String: AnyObect], [[String: AnyObject]]
    /// 数组 里面保存的是字典
    var pic_urls: [[String: AnyObject]]? {
        didSet {
            // 当KVC给pic_urls赋值时, 将pic_urls转成NSURL数组方便外面的人来使用
            let count = pic_urls?.count ?? 0
            
            // 没有图片要显示
            if count == 0 {
                return
            }
            
            // 创建storePictureURLS数组保存NSURL
            storePictureURLs = [NSURL]()
            
            // 有图片要显示
            for dict in pic_urls! {
                // 获取到每个字典,解析thumbnail_pic所对应的value,value是一个图片地址
                let urlString = dict["thumbnail_pic"] as! String
                
                let url = NSURL(string: urlString)!
                
                storePictureURLs?.append(url)
            }
        }
    }
    
    /// 模型提供好用一点的图片NSURL数组
    var storePictureURLs:[NSURL]?
    
    /// 用户模型   服务器返回的用户数据是字典
    var user: HMUser?
    
    
   /// 字典转模型
    init(dict:[String: AnyObject]) {
        super.init()
        
        // 获取字典中的所有key  来模型中找属性 找到属性后, 将字典中的value赋值给模型中的属性
       // ["id": 10, "text":"哈哈", "source": "来源", "aa": "不知道"]
        setValuesForKeysWithDictionary(dict)
    }
    
    
    override func setValue(value: AnyObject?, forKey key: String) {
       // 拦截user这个Key, 不要系统来Kvc 自己赋值
        if key == "user" {
            // 在判断value是不是字典
            if let dict = value as? [String : AnyObject] {
                // 字典转模型 并且赋值给user属性
                user = HMUser(dict: dict);
            }
            // 一定调用返回, 如果不返回 又会调用 super.setValue(value, forKey: key)又会将value(字典)赋值给user
            return
        }
        
        super.setValue(value, forKey: key)
        
          }
    
    /// 字典中的Key在模型中找不到对应的属性
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}
        
        
        /// 对象的打印
        override var description: String {
            get {
                let keys = ["create_at","id","text","source","pic_urls","user"]
                
                // 通过key在模型中招模型的值 找到属性的值,将key和值拼接到字典里面
                return self.dictionaryWithValuesForKeys(keys).description
            }
        }
    }

